import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa al entorno de informacion (ayuda y creditos).
 * @author Miguel Martinez Aguilar
 * @version 16 de Mayo del 2013
 */
public class Informacion extends Actor
{
    // Declaracion de variables de instancia
    private GreenfootImage[] ayuda;// es un arreglo de imagenes que muestran la ayuda.
    private GreenfootImage[] info;// es un arreglo de imagenes que muestran los creditos.
    private ScrollWorld mundo;// es una referencia al escenario movible.
    private Puerta puerta;// es la puerta que da acceso al juego.
    private BotInfo izq;// es el boton de la izquierda.
    private BotInfo der;// es el boton de la derecha.
    private BotInfo regreso;// es el boton que da acceso al menu principal.
    private boolean quien;// es un boleano que identifica que informacion se mostrara (ayuda o creditos).
    private int aux1;// es una variable que guarda el numero de imagen visible de la ayuda.
    private int tam1;// es un numero que establece el numero total de imagenes que muestran la ayuda.
    private int aux2;// es una variable que guarda el numero de imagen visible de los creditos.
    private int tam2;// es un numero que establece el numero total de imagenes que muestran los creditos.
    
    /**
     * Constructor de Informacion.
     * @param mundo: un parametro que haga referencia al mundo movible.
     * @param puerta: la puerta que da acceso al juego.
     * @param quien: booleano que establece que tipo de informacion que se visualizara (ayuda o creditos)
     */
    public Informacion(ScrollWorld mundo, Puerta puerta, boolean quien)
    {
        this.mundo = mundo;
        this.puerta = puerta;
        izq = new BotInfo(this,"anterior",0);
        der = new BotInfo(this,"siguiente",1);
        regreso = new BotInfo(this,"menu_prin",2);
        this.quien = quien;
        aux1 = aux2 = 0;
        tam1 = 8;
        tam2 = 3;
        ayuda = new GreenfootImage[tam1];
        for(int i = 0; i < tam1; i++)ayuda[i] = new GreenfootImage("ayuda" + i + ".png");
        if(quien)this.setImage(ayuda[0]);
        info = new GreenfootImage[tam2];
        for(int i = 0; i < tam2; i++)info[i] = new GreenfootImage("info" + i + ".png");
        if(!quien)this.setImage(info[0]);
    }  
    
    /**
     * Este metodo prepara otros elementos del inicio para este entorno
     */
    public void prepara() 
    {
        mundo.addObject(izq,this.getX() - 200,this.getY() + 252);
        mundo.addObject(regreso,this.getX(),this.getY() + 252);
        mundo.addObject(der,this.getX() + 200,this.getY() + 252);
    }
    
    /**
     * Este metodo cambia la imagen visible de la informacion por otra, ya sea que <p>
     * la siguiente imagen se encuentre a la izquierda  o a la derecha.
     * @param val: booleano que indica si la informacion siguiente es a la derecha o a la izquierda.
     */
    public void cambiaImagen(boolean val) 
    {
        if(quien){
            if(val){
                if(aux1 < (tam1 - 1))aux1++;
            }
            else{
                if(aux1 > 0)aux1--;
            }
            this.setImage(ayuda[aux1]);
        }
        else{
            if(val){
                if(aux2 < (tam2 - 1))aux2++;
            }
            else{
                if(aux2 > 0)aux2--;
            }
            this.setImage(info[aux2]);
        }
    }
    
    /**
     * Este metodo regresa al usuario al menu principal
     */
    public void menuPrincipal() 
    {
        this.quitarBotones();
        puerta.nuevaEscena();
    }
    
    /**
     * Este metodo quita las interfaces de la informacion.
     */
    public void quitarBotones() 
    {
        mundo.removeObject(izq);
        mundo.removeObject(der);
        mundo.removeObject(regreso);
        World escena = super.getWorld();
        escena.removeObject(this);
    }
}
